]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
volume: Add back sound feedback on scroll
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 23 Feb 2018 22:58:22 +0000 (23:58 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Sat, 23 Nov 2019 14:08:54 +0000 (15:08 +0100)
Commit 8d4855f1008 accidentally removed the volume change feedback
for scroll events. Add it back to be consistent again with moving
the slider via arrow keys, slider drags/clicks and gsd's media keys
handling.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/53

js/ui/status/volume.js

index 0f461189833a82c12ad24cc2fe0674458a56eb53..48ae45a9a43775396401aa674d5d228a33b4daa0 100644 (file)
@@ -1,7 +1,7 @@
 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 /* exported Indicator */
 
-const { Clutter, Gio, GObject, Gvc, St } = imports.gi;
+const { Clutter, Gio, GLib, GObject, Gvc, St } = imports.gi;
 const Signals = imports.signals;
 
 const Main = imports.ui.main;
@@ -30,6 +30,9 @@ var StreamSlider = class {
 
         this.item = new PopupMenu.PopupBaseMenuItem({ activate: false });
 
+        this._inDrag = false;
+        this._notifyVolumeChangeId = 0;
+
         this._slider = new Slider.Slider(0);
 
         this._soundSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.sound' });
@@ -38,7 +41,11 @@ var StreamSlider = class {
 
         this._sliderChangedId = this._slider.connect('notify::value',
                                                      this._sliderChanged.bind(this));
-        this._slider.connect('drag-end', this._notifyVolumeChange.bind(this));
+        this._slider.connect('drag-begin', () => (this._inDrag = true));
+        this._slider.connect('drag-end', () => {
+            this._inDrag = false;
+            this._notifyVolumeChange();
+        });
 
         this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
         this.item.add(this._icon);
@@ -116,6 +123,16 @@ var StreamSlider = class {
                 this._stream.change_is_muted(false);
         }
         this._stream.push_volume();
+
+        if (!this._notifyVolumeChangeId && !this._inDrag) {
+            this._notifyVolumeChangeId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 30, () => {
+                this._notifyVolumeChange();
+                this._notifyVolumeChangeId = 0;
+                return GLib.SOURCE_REMOVE;
+            });
+            GLib.Source.set_name_by_id(this._notifyVolumeChangeId,
+                '[gnome-shell] this._notifyVolumeChangeId');
+        }
     }
 
     _notifyVolumeChange() {